#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 10

char str[10000];

typedef struct Stack
{
    char data[MAXSIZE];
    int top;
} Stack;

// 初始化栈
void InitStack(Stack &s)
{
    s.top = -1;
}

// 判空
bool Empty(Stack &s)
{
    if (s.top == -1)
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool InStack(Stack &s, char x)
{
    if (s.top == MAXSIZE - 1)
    {
        return false;
    }
    else
    {
        s.top = s.top + 1;
        s.data[s.top] = x;
        return true;
    }
}

// 出栈
bool OutStack(Stack &s, char &x)
{
    if (s.top == -1)
    {
        return false;
    }
    else
    {
        x = s.data[s.top];
        s.top = s.top - 1;
        return true;
    }
}

// 判断括号匹配
bool CheckBracket(Stack &s, char str[], int length)
{
    for (int i = 0; i < length; i++)
    {
        if (str[i] == '(' || str[i] == '[' || str[i] == '{')
        {
            InStack(s, str[i]);
        }
        else
        {
            if (Empty(s))
            {
                printf("全是右括号，括号不匹配\n");
                return false;
            }
            else
            {
                char topelem;
                OutStack(s, topelem);
                if (str[i] == ')' && topelem != '(')
                {
                    printf("左右括号不匹配\n");
                    return false;
                }
                if (str[i] == ']' && topelem != '[')
                {
                    printf("左右括号不匹配\n");
                    return false;
                }
                if (str[i] == '}' && topelem != '{')
                {
                    printf("左右括号不匹配\n");
                    return false;
                }
            }
        }
    }
    return Empty(s);
}

int main()
{
    Stack s;
    InitStack(s);
    int length, len = 0;
    scanf("%d", &length);
    for (int i = 0; i < length; i++)
    {
        scanf(" %c", &str[i]);
        len = len + 1;
        if (str[i] == '#')
        {
            len = len - 1;
            break;
        }
    }
    bool is_Empty = CheckBracket(s, str, len);
    if (is_Empty == true)
    {
        printf("括号匹配成功，所有括号已经完全匹配\n");
    }
    else
    {
        printf("括号匹配失败\n");
    }
    return 0;
}